'use strict';

/**
 * Config for the router
 */
angular.module('app')
  .run(
    ['$rootScope', '$state', '$stateParams',
      function ($rootScope, $state, $stateParams) {
        $rootScope.$state = $state;
        $rootScope.$stateParams = $stateParams;
      }
    ]
  )
  .config(
    ['$stateProvider', '$urlRouterProvider',
      function ($stateProvider, $urlRouterProvider) {

        $urlRouterProvider
          .otherwise('/app/dashboard-v1');
        $stateProvider
          .state('app', {
            abstract: true,
            url: '/app',
            templateUrl: 'tpl/app.html'
          })
          .state('app.dashboard-v1', {
            url: '/dashboard-v1',
            templateUrl: 'tpl/app_dashboard_v1.html',
            resolve: {
              deps: ['$ocLazyLoad',
                function ($ocLazyLoad) {
                  return $ocLazyLoad.load(['js/controllers/chart.js']);
                }
              ]
            }
          })
          .state('app.dashboard-v2', {
            url: '/dashboard-v2',
            templateUrl: 'tpl/app_dashboard_v2.html',
            resolve: {
              deps: ['$ocLazyLoad',
                function ($ocLazyLoad) {
                  return $ocLazyLoad.load(['js/controllers/chart.js']);
                }
              ]
            }
          })
          .state('app.ui', {
            url: '/ui',
            template: '<div ui-view class="fade-in-up"></div>'
          })
          .state('app.ui.buttons', {
            url: '/buttons',
            templateUrl: 'tpl/ui_buttons.html'
          })
          .state('app.ui.icons', {
            url: '/icons',
            templateUrl: 'tpl/ui_icons.html'
          })
          .state('app.ui.grid', {
            url: '/grid',
            templateUrl: 'tpl/ui_grid.html'
          })
          .state('app.ui.widgets', {
            url: '/widgets',
            templateUrl: 'tpl/ui_widgets.html'
          })
          .state('app.ui.bootstrap', {
            url: '/bootstrap',
            templateUrl: 'tpl/ui_bootstrap.html'
          })
          .state('app.ui.sortable', {
            url: '/sortable',
            templateUrl: 'tpl/ui_sortable.html'
          })
          .state('app.ui.portlet', {
            url: '/portlet',
            templateUrl: 'tpl/ui_portlet.html'
          })
          .state('app.ui.timeline', {
            url: '/timeline',
            templateUrl: 'tpl/ui_timeline.html'
          })
          .state('app.ui.tree', {
            url: '/tree',
            templateUrl: 'tpl/ui_tree.html',
            resolve: {
              deps: ['$ocLazyLoad',
                function ($ocLazyLoad) {
                  return $ocLazyLoad.load('angularBootstrapNavTree').then(
                    function () {
                      return $ocLazyLoad.load('js/controllers/tree.js');
                    }
                  );
                }
              ]
            }
          })
          .state('app.ui.toaster', {
            url: '/toaster',
            templateUrl: 'tpl/ui_toaster.html',
            resolve: {
              deps: ['$ocLazyLoad',
                function ($ocLazyLoad) {
                  return $ocLazyLoad.load('toaster').then(
                    function () {
                      return $ocLazyLoad.load('js/controllers/toaster.js');
                    }
                  );
                }
              ]
            }
          })
          .state('app.ui.jvectormap', {
            url: '/jvectormap',
            templateUrl: 'tpl/ui_jvectormap.html',
            resolve: {
              deps: ['$ocLazyLoad',
                function ($ocLazyLoad) {
                  return $ocLazyLoad.load('js/controllers/vectormap.js');
                }
              ]
            }
          })
          .state('app.ui.googlemap', {
            url: '/googlemap',
            templateUrl: 'tpl/ui_googlemap.html',
            resolve: {
              deps: ['uiLoad',
                function (uiLoad) {
                  return uiLoad.load([
                    'js/app/map/load-google-maps.js',
                    'js/app/map/ui-map.js',
                    'js/app/map/map.js'
                  ]).then(
                    function () {
                      return loadGoogleMaps();
                    }
                  );
                }
              ]
            }
          })
          .state('app.chart', {
            url: '/chart',
            templateUrl: 'tpl/ui_chart.html',
            resolve: {
              deps: ['uiLoad',
                function (uiLoad) {
                  return uiLoad.load('js/controllers/chart.js');
                }
              ]
            }
          })
          // table
          .state('app.table', {
            url: '/table',
            template: '<div ui-view></div>'
          })
          .state('app.table.static', {
            url: '/static',
            templateUrl: 'tpl/table_static.html'
          })
          .state('app.table.datatable', {
            url: '/datatable',
            templateUrl: 'tpl/table_datatable.html'
          })
          .state('app.table.footable', {
            url: '/footable',
            templateUrl: 'tpl/table_footable.html'
          })
          .state('app.table.grid', {
            url: '/grid',
            templateUrl: 'tpl/table_grid.html',
            resolve: {
              deps: ['$ocLazyLoad',
                function ($ocLazyLoad) {
                  return $ocLazyLoad.load('ngGrid').then(
                    function () {
                      return $ocLazyLoad.load('js/controllers/grid.js');
                    }
                  );
                }
              ]
            }
          })
          // form
          .state('app.form', {
            url: '/form',
            template: '<div ui-view class="fade-in"></div>',
            resolve: {
              deps: ['uiLoad',
                function (uiLoad) {
                  return uiLoad.load('js/controllers/form.js');
                }
              ]
            }
          })
          .state('app.form.elements', {
            url: '/elements',
            templateUrl: 'tpl/form_elements.html'
          })
          .state('app.form.validation', {
            url: '/validation',
            templateUrl: 'tpl/form_validation.html'
          })
          .state('app.form.wizard', {
            url: '/wizard',
            templateUrl: 'tpl/form_wizard.html'
          })
          .state('app.form.fileupload', {
            url: '/fileupload',
            templateUrl: 'tpl/form_fileupload.html',
            resolve: {
              deps: ['$ocLazyLoad',
                function ($ocLazyLoad) {
                  return $ocLazyLoad.load('angularFileUpload').then(
                    function () {
                      return $ocLazyLoad.load('js/controllers/file-upload.js');
                    }
                  );
                }
              ]
            }
          })
          .state('app.form.imagecrop', {
            url: '/imagecrop',
            templateUrl: 'tpl/form_imagecrop.html',
            resolve: {
              deps: ['$ocLazyLoad',
                function ($ocLazyLoad) {
                  return $ocLazyLoad.load('ngImgCrop').then(
                    function () {
                      return $ocLazyLoad.load('js/controllers/imgcrop.js');
                    }
                  );
                }
              ]
            }
          })
          .state('app.form.select', {
            url: '/select',
            templateUrl: 'tpl/form_select.html',
            controller: 'SelectCtrl',
            resolve: {
              deps: ['$ocLazyLoad',
                function ($ocLazyLoad) {
                  return $ocLazyLoad.load('ui.select').then(
                    function () {
                      return $ocLazyLoad.load('js/controllers/select.js');
                    }
                  );
                }
              ]
            }
          })
          .state('app.form.slider', {
            url: '/slider',
            templateUrl: 'tpl/form_slider.html',
            controller: 'SliderCtrl',
            resolve: {
              deps: ['$ocLazyLoad',
                function ($ocLazyLoad) {
                  return $ocLazyLoad.load('vr.directives.slider').then(
                    function () {
                      return $ocLazyLoad.load('js/controllers/slider.js');
                    }
                  );
                }
              ]
            }
          })
          .state('app.form.editor', {
            url: '/editor',
            templateUrl: 'tpl/form_editor.html',
            controller: 'EditorCtrl',
            resolve: {
              deps: ['$ocLazyLoad',
                function ($ocLazyLoad) {
                  return $ocLazyLoad.load('textAngular').then(
                    function () {
                      return $ocLazyLoad.load('js/controllers/editor.js');
                    }
                  );
                }
              ]
            }
          })
          // pages
          .state('app.page', {
            url: '/page',
            template: '<div ui-view class="fade-in-down"></div>'
          })
          .state('app.page.profile', {
            url: '/profile',
            templateUrl: 'tpl/page_profile.html'
          })
          .state('app.page.post', {
            url: '/post',
            templateUrl: 'tpl/page_post.html'
          })
          .state('app.page.search', {
            url: '/search',
            templateUrl: 'tpl/page_search.html'
          })
          .state('app.page.invoice', {
            url: '/invoice',
            templateUrl: 'tpl/page_invoice.html'
          })
          .state('app.page.price', {
            url: '/price',
            templateUrl: 'tpl/page_price.html'
          })
          .state('app.docs', {
            url: '/docs',
            templateUrl: 'tpl/docs.html'
          })
          // others
          .state('lockme', {
            url: '/lockme',
            templateUrl: 'tpl/page_lockme.html'
          })
          .state('access', {
            url: '/access',
            template: '<div ui-view class="fade-in-right-big smooth"></div>'
          })
          .state('access.signin', {
            url: '/signin',
            templateUrl: 'tpl/page_signin.html',
            resolve: {
              deps: ['uiLoad',
                function (uiLoad) {
                  return uiLoad.load(['js/controllers/signin.js']);
                }
              ]
            }
          })
          .state('access.signup', {
            url: '/signup',
            templateUrl: 'tpl/page_signup.html',
            resolve: {
              deps: ['uiLoad',
                function (uiLoad) {
                  return uiLoad.load(['js/controllers/signup.js']);
                }
              ]
            }
          })
          .state('access.forgotpwd', {
            url: '/forgotpwd',
            templateUrl: 'tpl/page_forgotpwd.html'
          })
          .state('access.404', {
            url: '/404',
            templateUrl: 'tpl/page_404.html'
          })

          // fullCalendar
          .state('app.calendar', {
            url: '/calendar',
            templateUrl: 'tpl/app_calendar.html',
            // use resolve to load other dependences
            resolve: {
              deps: ['$ocLazyLoad', 'uiLoad',
                function ($ocLazyLoad, uiLoad) {
                  return uiLoad.load(
                    ['vendor/jquery/fullcalendar/fullcalendar.css',
                      'vendor/jquery/fullcalendar/theme.css',
                      'vendor/jquery/jquery-ui-1.10.3.custom.min.js',
                      'vendor/libs/moment.min.js',
                      'vendor/jquery/fullcalendar/fullcalendar.min.js',
                      'js/app/calendar/calendar.js'
                    ]
                  ).then(
                    function () {
                      return $ocLazyLoad.load('ui.calendar');
                    }
                  )
                }
              ]
            }
          })

          // mail
          .state('app.mail', {
            abstract: true,
            url: '/mail',
            templateUrl: 'tpl/mail.html',
            // use resolve to load other dependences
            resolve: {
              deps: ['uiLoad',
                function (uiLoad) {
                  return uiLoad.load(['js/app/mail/mail.js',
                    'js/app/mail/mail-service.js',
                    'vendor/libs/moment.min.js'
                  ]);
                }
              ]
            }
          })
          .state('app.mail.list', {
            url: '/inbox/{fold}',
            templateUrl: 'tpl/mail.list.html'
          })
          .state('app.mail.detail', {
            url: '/{mailId:[0-9]{1,4}}',
            templateUrl: 'tpl/mail.detail.html'
          })
          .state('app.mail.compose', {
            url: '/compose',
            templateUrl: 'tpl/mail.new.html'
          })

          .state('layout', {
            abstract: true,
            url: '/layout',
            templateUrl: 'tpl/layout.html'
          })
          .state('layout.fullwidth', {
            url: '/fullwidth',
            views: {
              '': {
                templateUrl: 'tpl/layout_fullwidth.html'
              },
              'footer': {
                templateUrl: 'tpl/layout_footer_fullwidth.html'
              }
            },
            resolve: {
              deps: ['uiLoad',
                function (uiLoad) {
                  return uiLoad.load(['js/controllers/vectormap.js']);
                }
              ]
            }
          })
          .state('layout.mobile', {
            url: '/mobile',
            views: {
              '': {
                templateUrl: 'tpl/layout_mobile.html'
              },
              'footer': {
                templateUrl: 'tpl/layout_footer_mobile.html'
              }
            }
          })
          .state('layout.app', {
            url: '/app',
            views: {
              '': {
                templateUrl: 'tpl/layout_app.html'
              },
              'footer': {
                templateUrl: 'tpl/layout_footer_fullwidth.html'
              }
            },
            resolve: {
              deps: ['uiLoad',
                function (uiLoad) {
                  return uiLoad.load(['js/controllers/tab.js']);
                }
              ]
            }
          })
          .state('apps', {
            abstract: true,
            url: '/apps',
            templateUrl: 'tpl/layout.html'
          })
          .state('apps.note', {
            url: '/note',
            templateUrl: 'tpl/apps_note.html',
            resolve: {
              deps: ['uiLoad',
                function (uiLoad) {
                  return uiLoad.load(['js/app/note/note.js',
                    'vendor/libs/moment.min.js'
                  ]);
                }
              ]
            }
          })
          .state('apps.contact', {
            url: '/contact',
            templateUrl: 'tpl/apps_contact.html',
            resolve: {
              deps: ['uiLoad',
                function (uiLoad) {
                  return uiLoad.load(['js/app/contact/contact.js']);
                }
              ]
            }
          })
          .state('app.weather', {
            url: '/weather',
            templateUrl: 'tpl/apps_weather.html',
            resolve: {
              deps: ['$ocLazyLoad',
                function ($ocLazyLoad) {
                  return $ocLazyLoad.load({
                    name: 'angular-skycons',
                    files: ['js/app/weather/skycons.js',
                      'vendor/libs/moment.min.js',
                      'js/app/weather/angular-skycons.js',
                      'js/app/weather/ctrl.js'
                    ]
                  });
                }
              ]
            }
          })
          .state('music', {
            url: '/music',
            templateUrl: 'tpl/music.html',
            controller: 'MusicCtrl',
            resolve: {
              deps: ['$ocLazyLoad',
                function ($ocLazyLoad) {
                  return $ocLazyLoad.load([
                    'com.2fdevs.videogular',
                    'com.2fdevs.videogular.plugins.controls',
                    'com.2fdevs.videogular.plugins.overlayplay',
                    'com.2fdevs.videogular.plugins.poster',
                    'com.2fdevs.videogular.plugins.buffering',
                    'js/app/music/ctrl.js',
                    'js/app/music/theme.css'
                  ]);
                }
              ]
            }
          })
          .state('music.home', {
            url: '/home',
            templateUrl: 'tpl/music.home.html'
          })
          .state('music.genres', {
            url: '/genres',
            templateUrl: 'tpl/music.genres.html'
          })
          .state('music.detail', {
            url: '/detail',
            templateUrl: 'tpl/music.detail.html'
          })
          .state('music.mtv', {
            url: '/mtv',
            templateUrl: 'tpl/music.mtv.html'
          })
          .state('music.mtvdetail', {
            url: '/mtvdetail',
            templateUrl: 'tpl/music.mtv.detail.html'
          })
          .state('music.playlist', {
            url: '/playlist/{fold}',
            templateUrl: 'tpl/music.playlist.html'
          })

          // 20170830新增
          .state('app.systemset', {
            url: '/systemsetting',
            templateUrl: 'comp/systemsetting.html'
          })
          .state('app.fwmanger', {
            url: '/fwmanger',
            templateUrl: 'comp/fwmanager.html'
          })
          .state('app.fwdetail', {
            url: '/fwdetail',
            templateUrl: 'comp/fwdetail.html'
          })
          .state('app.cwsmanager', {
            url: '/cwsmanager',
            templateUrl: 'comp/cwsmanager.html'
          })
          .state('app.cwsdetail', {
            url: '/cwsdetail',
            templateUrl: 'comp/cwsdetail.html'
          })
          .state('app.areasetting', {
            url: '/areasetting',
            templateUrl: 'comp/areasetting.html',
            resolve: {
              deps: ['$ocLazyLoad',
                function ($ocLazyLoad) {
                  return $ocLazyLoad.load('angularBootstrapNavTree').then(
                    function () {
                      return $ocLazyLoad.load('comp/areasetting_tree.js');
                    }
                  );
                }
              ]
            }
          })
          .state('app.cwmanager', {
            url: '/cwmanager',
            templateUrl: 'comp/cwmanager.html'
          })
          .state('app.cwdetail', {
            url: '/cwdetail',
            templateUrl: 'comp/cwdetail.html'
          })
          .state('app.clmanager', {
            url: '/clmanager',
            templateUrl: 'comp/clmanager.html'
          })
          .state('app.cldetail', {
            url: '/cldetail',
            templateUrl: 'comp/cldetail.html'
          })
          .state('app.bwmatter', {
            url: '/bwmatter',
            templateUrl: 'comp/bwmatter.html'
          })
          .state('app.zhmanager', {
            url: '/zhmanager',
            templateUrl: 'comp/zhmanager.html'
          })
          .state('app.zhdetail', {
            url: '/zhdetail',
            templateUrl: 'comp/zhdetail.html'
          })
          .state('app.sfjl', {
            url: '/sfjl',
            templateUrl: 'comp/appsfjlmanager.html'
          })
          .state('app.fytzapply', {
            url: '/fytzapply',
            templateUrl: 'comp/fytzapply.html'
          })
          .state('app.fytzsearch', {
            url: '/fytzsearch',
            templateUrl: 'comp/fytzapply_search.html'
          })
          .state('app.fytzappro', {
            url: '/fytzappro',
            templateUrl: 'comp/fytzapply_appro.html'
          })
          .state('app.worktransfer', {
            url: '/worktransfer',
            templateUrl: 'comp/worktransfer.html'
          })
          .state('app.worktransfer_search', {
            url: '/worktransfer_search',
            templateUrl: 'comp/worktransfer_search.html'
          })
          .state('app.paymentslip_search', {
            url: '/paymentslip_search',
            templateUrl: 'comp/paymentslip_search.html'
          })
          .state('app.kfgjsetting', {
            url: '/kfgjsetting',
            templateUrl: 'comp/kfgjsetting.html'
          })
          .state('app.platform', {
            url: '/platform',
            templateUrl: 'comp/platform.html'
          })
          .state('app.charge', {
            url: '/charge',
            templateUrl: 'comp/charge.html'
          })
          .state('app.charge_search', {
            url: '/charge_search',
            templateUrl: 'comp/charge_search.html'
          })
          .state('app.chargeplan_search', {
            url: '/chargeplan_search',
            templateUrl: 'comp/chargeplan_search.html'
          })
          .state('app.chargeaccount', {
            url: '/chargeaccount',
            templateUrl: 'comp/chargeaccount.html'
          })
          .state('app.chargeaccount_search', {
            url: '/chargeaccount_search',
            templateUrl: 'comp/chargeaccount_search.html'
          })
          .state('app.chargeprosetting', {
            url: '/chargeprosetting',
            templateUrl: 'comp/chargeprosetting.html'
          })
          .state('app.refund', {
            url: '/refund',
            templateUrl: 'comp/refund.html'
          })
          .state('app.refund_search', {
            url: '/refund_search',
            templateUrl: 'comp/refund_search.html'
          })
          .state('app.refund_apply', {
            url: '/refund_apply',
            templateUrl: 'comp/refund_apply.html'
          })
          .state('app.refund_apply_search', {
            url: '/refund_apply_search',
            templateUrl: 'comp/refund_apply_search.html'
          })
          .state('app.refund_apply_appro', {
            url: '/refund_apply_appro',
            templateUrl: 'comp/refund_apply_appro.html'
          })
          .state('app.build_charge_plan', {
            url: '/build_charge_plan',
            templateUrl: 'comp/build_charge_plan.html'
          })
          .state('app.zlmanager', {
            url: '/zlmanager',
            templateUrl: 'comp/zlmanager.html'
          })
          .state('app.xqinit', {
            url: '/xqinit',
            templateUrl: 'comp/xqinit.html',
            resolve: {
              deps: ['$ocLazyLoad',
                function ($ocLazyLoad) {
                  return $ocLazyLoad.load('angularBootstrapNavTree').then(
                    function () {
                      return $ocLazyLoad.load('comp/areasetting_tree.js');
                    }
                  );
                }
              ]
            }
          })

      }
    ]
  );